簡體   English   中英

檢查字符串列表中是否存在字符串數組

[英]Check if string array exists in list of string

我有一個字符串數組列表。 我通過迭代制作了一個新的字符串數組,然后嘗試將其放入列表中,但是當我使用contain函數時,它不會檢查它是否存在,而是插入重復項。

List<string[]> possibleColumnValues = new List<string[]>();

while(true){

  string[] rArr = new string[5];
  //some code to populate the string goes here

  if (!possibleColumnValues.Contains(rArr){
  {
      possibleColumnValues.Add(rArr);
  }
}
private static bool AllElementInList(List<string[]> list, string[] arr)
{
    return list.Select(ar2 => arr.All(ar2.Contains)).FirstOrDefault();
}

用作:

        List<string[]> list = new List<string[]>();
        string[] arr;

        bool flag = AllElementInList(list, arr);

仍然不是很有效,但是應該做到這一點:

if (!possibleColumnValues.Any(rArr.SequenceEqual))
{
    possibleColumnValues.Add(rArr);
}

Contains方法依賴於其元素的Equals方法來查看其是否包含特定值。 數組不會覆蓋Equals的默認實現,因此Contains僅在引用相同對象時才認為該數組等於列表中已經存在的數組( Equals的默認行為)。

要解決此問題,您可以使用Enumerable.Any()擴展方法以及SequenceEqual擴展方法:

if (!possibleColumnValues.Any(item.SequenceEqual))
{
    possibleColumnValues.Add(rArr);
}

您可以使用Sequence equal方法比較兩個字符串數組。

來自System.Linq的SequenceEqual擴展使用C#語言編寫,您可以在一條語句中測試兩個集合的相等性。

序列相等

但是它的性能比其他實現要差得多。

或實現自己的等於函數

List.Contains方法

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM