【问题标题】:Find index of an array in List of arrays in C#在 C# 中的数组列表中查找数组的索引
【发布时间】:2015-10-31 12:10:55
【问题描述】:

如果你有一个数组列表,例如:

List<int[]> ListOfArrays = new List<int[]>();
ListOfArrays.Add(new int[] { 1, 1 });
ListOfArrays.Add(new int[] { 2, 1 });

如何在 List 中找到 { 2, 1} 的索引?

我不想使用迭代循环。我想要一种简洁的方法,就像 PaRiMaL RaJ 在Check if string array exists in list of string 中建议的方法:

list.Select(ar2 => arr.All(ar2.Contains)).FirstOrDefault();

(如果给定字符串数组的成员存在于字符串数组列表中,上述代码将返回true)

【问题讨论】:

  • 避免迭代循环的唯一方法是字典和哈希查找表。
  • @xXliolauXx 通过迭代,我认为他的意思是 LINQ 而不是手写循环。
  • 内部数组的顺序重要吗?
  • @Yuval 啊我明白了...我认为这是他想要保持高的性能...我也想到了 LinQ 使用循环...

标签: c# arrays list


【解决方案1】:
var myArr = new int[] { 2, 1 };
List<int[]> ListOfArrays = new List<int[]>();
ListOfArrays.Add(new int[] { 1, 1 });
ListOfArrays.Add(new int[] { 4, 1 });
ListOfArrays.Add(new int[] { 1, 1 });
ListOfArrays.Add(new int[] { 2, 1 });

int index = ListOfArrays.FindIndex(l => Enumerable.SequenceEqual(myArr, l));

【讨论】:

  • 你可以缩短一点:ListOfArrays.FindIndex(l =&gt; l.SequenceEqual(myArr));
  • ListOfArrays.FindIndex(myArr.SequenceEqual); 也应该可以工作
【解决方案2】:

您可以为此使用SequenceEqual 方法。见 MSDN:https://msdn.microsoft.com/en-us/library/vstudio/bb348567(v=vs.100).aspx

【讨论】:

  • 感谢 Markus,我将不得不在列表上使用 foreach 循环并检查每个成员。应该有更聪明的方法.. :/
【解决方案3】:

你可以试试这个:

List<int[]> ListOfArrays = new List<int[]>();
ListOfArrays.Add(new int[] { 1, 1 });
ListOfArrays.Add(new int[] { 2, 1 });
var chk = ListOfArrays.FindIndex(e => (e.SequenceEqual(new int[] { 2, 1 })));

【讨论】:

    猜你喜欢
    • 2023-03-15
    • 2017-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-05
    • 1970-01-01
    • 2019-07-24
    相关资源
    最近更新 更多