【问题标题】:Delete specific array without delete same value in another index or location [duplicate]删除特定数组而不删除另一个索引或位置中的相同值[重复]
【发布时间】:2019-08-20 13:30:56
【问题描述】:

我有一个 string[] 值相同但索引或位置不同:

string[] test = {"jane", "joy", "adam", "jane"};

我想删除第一个jane而不删除最后一个jane

string[] test = {"joy", "adam", "jane"};

我是用这个方法删除的:

string[] newTest = test.Where(w => w != test[0]).ToArray();

但这会删除所有janes:

string[] newTest = {"joy", "adam"};

【问题讨论】:

    标签: c#


    【解决方案1】:

    你可以先找到元素的索引,然后从列表中删除它

    类似的,

     string[] test = {"jane", "joy", "adam", "jane"};
     List<string> list = new List<string>(test);
     list.RemoveAt(list.FindIndex(x => x == "jane"));
    
     Console.WriteLine(string.Join(",", list));
    

    如果你只想从数组中删除第一个元素,那么有多种方法可以实现这一点,

    第一:

    string[] test = {"jane", "joy", "adam", "jane"};
    var result = test.Skip(1);
    //If you want to convert it to array then
    //string[] result = test.Skip(1).ToArray();
    
    Console.WriteLine(string.Join(",", result));
    

    第二个:@Caius 建议

    string[] test = {"jane", "joy", "adam", "jane"};
    var result = test.RemoveAt(0);
    

    检查Where子句中的索引,

    string[] test = {"jane", "joy", "adam", "jane"};
    var result = test.Where((x, i) => i != 0);
    

    POC:.net Fiddle

    【讨论】:

    • 是的,我不知道你为什么被否决。这是正确满足 OP 规定要求的唯一答案。
    【解决方案2】:

    在我的项目中我使用这种方法删除

    但这就是说“我想要一个新数组,其中没有元素是单词“jane”,所以它会删除所有元素

    这是使用 List 从数组中删除任意索引的一种方法:

    List<string> l = new List<string>(test);
    l.RemoveAt(0);
    string[] newTest = l.ToArray();
    

    说实话,你最好避免一起使用数组,如果你需要这种编辑,只需使用 List 作为存储设备

    还请考虑在此处找到的建议:Remove element of a regular array


    如果您的问题是“我想删除 jane 的第一次出现而不是第二次出现”,让我们找到第一个 jane,然后创建一个排除它的新数组:

    List<string> l = new List<string>(test.Length);
    bool removing = true;
    foreach(string s in test) {
      if(removing && s == "jane") 
        removing = false;
      else      
        l.Add(s);
    }
    string[] newTest = l.ToArray();
    

    还有其他方法;您可以 indexOf 找到第一个 jane,然后 Array.Copy 所有内容直到但不包括第一个实例,以及之后的所有内容,不包括等等。虽然这段代码是相当自我记录的 - 迭代数组,寻找 jane,如果我们找到了她,我们仍然处于删除模式,只需关闭删除模式(然后这个 jane 永远不会将其添加到列表中,关闭删除标志意味着我们肯定会将其余名称添加到列表中)并继续处理列表的其余部分

    考虑一下,如果您只是使用 List 作为存储容器,那么这段代码会简单得多:

    test.RemoveAt(test.IndexOf("jane"));
    

    【讨论】:

    • 哦,所以你不想搜索“jane”的第一个出现,你只是想删除数组的第一个元素?嘘。
    • 没有。我只想删除特定数组而不删除另一个位置的相同值。所以如果我有 3 个 jane,我只删除特定数组中的 1 个 jane 并保留 2 个 jane
    • 我在这个答案中添加了更多内容
    猜你喜欢
    • 2013-06-12
    • 2018-10-23
    • 1970-01-01
    • 2020-09-08
    • 2022-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-15
    相关资源
    最近更新 更多