如何比较两个字符串列表

时间:2019-11-05 18:25:31

标签: c#

我正在尝试将2个集合与字符串列表进行比较。 第一个带有字符串列表的对象:

  

a0,b0,c0

     

a1,b1,c0

     

a1,b2,c0

     

a1,b2,c1

第二

  

a0,b0,c0

     

a1,b2,c0

我有方法从对象中获取字符串列表

public List<string> GetPlainRow(int index)
{
    if(index >= _countRows || index < 0)
    {
        throw new IndexOutOfRangeException();
    }

    List<string> returnedRow = new List<string>();

    foreach (KeyValuePair<string, List<string>> entry in _dataRows)
    {
        returnedRow.Add(entry.Value[index]);
    }
    return returnedRow;
}

试图将对象列表与以下内容进行比较:

for (int i = 0; i < dataCollection.CountRows; i++)
{
    var newRow = table.NewRow();
    for (var j = 0; j < dataCollection.GetPlainRow(i).Count; j++)
    {
        newRow[j] = dataCollection.GetPlainRow(i)[j];

    }
    for (int k = 0; k < dataCollection.CountRows; k++)
    {
        for (int l = 0; l < dataRestrained.CountRows; l++)
        {
           if(dataCollection.GetPlainRow(k).SequenceEqual(dataRestrained.GetPlainRow(l)))
            {
                found = true;
            }
        }
    }
    newRow[dataCollection.CountRows - 2] = found;
    found = false;
    table.Rows.Add(newRow);
}

但是似乎每次它返回true时,但是当我使用Equals而不是SequenceEqual时,它返回false。

2 个答案:

答案 0 :(得分:0)

为了简单起见,我为结果添加了一个类:

   internal class Result
            {
                public List<string> List { get; set; }
                public bool IsExisted { get; set; }
            }

然后我做了一个EqualityComparer ....

  internal class ListOfStringEqualityComparer : IEqualityComparer<List<string>>
        {
            public bool Equals(List<string> b1, List<string> b2)
            {
                if (b1.Count != b2.Count) return false;
                for (int i = 0; i < b1.Count; i++)
                {
                    if (b1[i] != b2[i]) return false;
                }
                return true;
            }

            public int GetHashCode(List<string> b2)
            {
                int hCode = 0;
                for (int i = 0; i < b2.Count; i++)
                {
                    hCode = EqualityComparer<string>.Default.GetHashCode(b2[i]);
                }
                return hCode.GetHashCode();
            }
        }

现在您可以尝试以下方法:

 ListOfStringEqualityComparer  listOfStringEqualityComparer= new ListOfStringEqualityComparer();
        var q = (from c in bigList
                 select new Result() { List = new List<string>(c), IsExisted = smallList.Contains(c, listOfStringEqualityComparer) });

如果有帮助,请让我...

答案 1 :(得分:0)

也许是这样

Import requests as r
apiToken = 'my token'
data center = 'co1'
url = 'https://{0}.qualtrics.com/API/v3/surveys'.format(data center)
headers = {'x-api-token':apiToken}
response = r.get(url, headers = headers)
print(response.status_code)