相关疑难解决方法(0)

列表的不同列表,其中列表包含相同的值但顺序不同

我有一个清单:

var list = new List<List<int>>();
Run Code Online (Sandbox Code Playgroud)

哪个可以包含

list[0] = {1, 2, 3, 4}
list[1] = {3, 1, 2, 4}
list[2] = {2, 1, 7, 3}
Run Code Online (Sandbox Code Playgroud)

如何检测[0]和[1]之间的重复并删除其中一个?代码是c-sharp.

实际上它不是一个int,但这不应该改变问题.

c# list distinct

7
推荐指数
2
解决办法
5512
查看次数

.NET检查两个IEnumerable <T>是否具有相同的元素

可能重复:
比较两个集合是否相等

我需要验证两个IEnumerable<T>列表是否具有相同的元素,不一定是相同的顺序.

我的目标是.NET 3.5.

这是测试.问题是,应该如何HasSameElements()实施?

var l1 = new[]{1,2,3};
var l2 = new[]{3,1,2};

bool rez1 = l1.HasSameElements(l2);//should be true

var l3 = new[]{1,2,3,2};
var l4 = new[]{3,1,2,2};
bool rez2 = l3.HasSameElements(l4);//should be true

var l5 = new[]{1,2,3,2};
var l6 = new[]{1,2,3};
bool rez3 = l5.HasSameElements(l6);//should be false
Run Code Online (Sandbox Code Playgroud)

附加说明:

  • 在示例中,我使用IEnumerable,但T可以是任何东西.T必须实施IComparable吗?

  • Enumerable.SequenceEquals()本身不起作用,它期望元素的顺序相同.

  • 这是一个模板HasElements:

[只是一些占位符文本作为Markdown'代码格式'错误的解决方法]

public static class Extensions {
    public static bool HasElements(this IEnumerable<T> l1, IEnumerable<T> l2){
        throw new NotImplementedException();
    } 
}
Run Code Online (Sandbox Code Playgroud)

.net c# linq list set

5
推荐指数
2
解决办法
6092
查看次数

比较两个Dictionary <T>的最佳方法是否相等

这是为两个词典的相等性创建比较器的最佳方法吗?这需要准确.请注意,Entity.Columns是KeyValuePair的字典(字符串,对象):

public class EntityColumnCompare : IEqualityComparer<Entity>
{
    public bool Equals(Entity a, Entity b)
    {
        var aCol = a.Columns.OrderBy(KeyValuePair => KeyValuePair.Key);
        var bCol = b.Columns.OrderBy(KeyValuePAir => KeyValuePAir.Key); 

        if (aCol.SequenceEqual(bCol))
            return true;
        else
            return false;           
    }

    public int GetHashCode(Entity obj)
    {
        return obj.Columns.GetHashCode(); 
    }
}
Run Code Online (Sandbox Code Playgroud)

对GetHashCode实现也不太确定.

谢谢!

c# generics collections dictionary iequalitycomparer

5
推荐指数
1
解决办法
9169
查看次数

如何检查集合的内容(> 2)是一样的

我有一个清单.出于正当理由,我多次复制List并将其用于不同目的.在某些时候,我需要检查所有这些集合的内容是否相同.

好吧,我知道怎么做.但作为"短手"编码(linq ...)的粉丝,我想知道我是否能用最短的代码行检查这个效率.

    List<string> original, duplicate1, duplicate2, duplicate3, duplicate4
                                       = new List<string();

        //...some code.....
        bool isequal = duplicate4.sequenceequal(duplicate3) 
         && duplicate3.sequenceequal(duplicate2)
         && duplicate2.sequenceequal(duplicate1) 
         && duplicate1.sequenceequal(original);//can we do it better than this 
Run Code Online (Sandbox Code Playgroud)

UPDATE

Codeinchaos指出了我没有想到的某些语句(重复和列表顺序).虽然sequenceequal会处理重复,但列表的顺序可能是个问题.所以我改变代码如下.我需要复制列表.

List<List<string>> copy = new List<List<int>> { duplicate1, duplicate2,  
                                                 duplicate3, duplicate4 }; 
bool iseqaul  = (original.All(x => (copy.All(y => y.Remove(x))))
                                         && copy.All(n => n.Count == 0)); 
Run Code Online (Sandbox Code Playgroud)

UPDATE2

感谢Eric使用HashSet可以非常有效,如下所示.这不会覆盖重复.

List<HashSet<string>> copy2 =new List<HashSet<string>>{new HashSet<string>(duplicate1),
                                                       new HashSet<string>(duplicate2),
                                                       new HashSet<string> duplicate3),
                                                       new HashSet<string>(duplicate4)};
  HashSet<string> origninalhashset = new HashSet<string>(original);
  bool eq = copy2.All(x …
Run Code Online (Sandbox Code Playgroud)

c# linq

5
推荐指数
1
解决办法
1067
查看次数

压缩两个对象

我有以下实体

public class Employee
{
    public int EmpId { get; set; }
 }
Run Code Online (Sandbox Code Playgroud)

如何比较对象?谢谢

c#

3
推荐指数
1
解决办法
485
查看次数

如何在C#中使用LINQ比较两个List <String>

这两个清单就像

          LISTONE    "ONE", "TWO", "THREE"
          LISTTWO    "ONE", "TWO", "THREE"
Run Code Online (Sandbox Code Playgroud)

我需要比较两个列表中的项目是否相同.

在LINQ中有没有办法做到这一点

c# linq

2
推荐指数
1
解决办法
2518
查看次数

SequenceEqual为true,但HashSet.SetEquals为false

我一直在执行设定平等(即列表比较,其中的顺序是无关紧要的)和阅读做题等之后尝试这个这个,写了下面的简单扩展:

    public static bool SetEqual<T>(this IEnumerable<T> enumerable, IEnumerable<T> other)
    {
        if (enumerable == null && other == null)
            return true;

        if (enumerable == null || other == null)
            return false;

        var setA = new HashSet<T>(enumerable);
        return setA.SetEquals(other);
    }
Run Code Online (Sandbox Code Playgroud)

但是,我遇到了一个简单的数据结构,这种方法不起作用,而Enumerable.SequenceEqual则不行.

    public class Test : IEquatable<Test>
    {
        public Guid Id { get; set; }
        public List<Test> RelatedTest { get; set; }

        public override bool Equals(object obj)
        {
            if (ReferenceEquals(null, obj)) return false;
            if (ReferenceEquals(this, obj)) return true;
            if …
Run Code Online (Sandbox Code Playgroud)

c# linq equality set sequence

2
推荐指数
1
解决办法
1759
查看次数

无论订单如何,如何识别两个List <string>是否相等?

我有以下2个对象

List<string> list1
List<string> list2
Run Code Online (Sandbox Code Playgroud)

在列表1上我有3个项目在列表2上我有不同顺序的相同3个项目.

我需要一个简单的方法来返回两个列表相等,当它们包含相同的元素而不管顺序

c# linq

2
推荐指数
2
解决办法
5977
查看次数

如何将两个数组的元素等同,而不管条目的顺序如何

我试图计算两个像myArray{a,b,c}和的数组urArray{a,b,c,c}

我想检查两个元素是否都有相同的元素,例如在上面的条件中,第二个数组urArray有一个额外的'c'.

如果代码具有相同的元素,则代码应该能够等同两组数组,并且元素的顺序无关紧要.只是两个数组都应该有相同的元素,即如果一个有两个'c',另一个也应该有两个'c',否则条件是假的.

所以我做的是:

char[] myArray = new char[] {'a','b','c','c'};
char[] urArray = new char[] { 'a', 'b', 'c' ,'a'};
List<char> tmp2 = new List<char>(urArray);

for (int i = 0; i < myArray.Length; ++i)
{
    for (int j = 0; j < urArray.Length; ++j)
    {
        if (myArray[i] == urArray[j])
        {

            Console.WriteLine(urArray[j] + "--> " + "urArray"+"  myArray"+"--> "+myArray[i]);
            tmp2.Remove(urArray[j]);

            urArray = tmp2.ToArray();

        }
        else if (myArray[i] != urArray[j])
        {
            Console.WriteLine(myArray[i] + …
Run Code Online (Sandbox Code Playgroud)

c# arrays comparison equality

0
推荐指数
1
解决办法
5048
查看次数

比较/等于两个IList <T>对象

编辑:

我想要做的就是找到是否db.Id等于xml.Iddb.SubTitle等于xml.SubTitle....等.....我所有的道具

我也尝试过

bool result = db.SequenceEqual(xml) 它一直返回false.

编辑.编辑

我在最终寻求帮助之前做了搜索,我不确定解决问题的最佳方法是什么.

我有两个IList对象,它们都具有完全相同的属性,但数据可能不同.一个对象从db填充,其他对象从xml读取以比较两个源是同步的.

这是我的对象看起来像:

public class EmployeeObject
{
    public Int32 Id { get; set; }
    public string SubTitle { get; set; }
    public string Desc { get; set; }
    public bool Active { get; set; }
    public string ActiveDateTime { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

这是我尝试过的:

    IList<EmployeeObject> db = Db.EmployeeRepository.PopulateFromDb();
    IList<EmployeeObject> xml = Xml.EmployeeRepository.PopulateFromXml();
Run Code Online (Sandbox Code Playgroud)

//到目前为止,这两个对象都填充了数据......

现在比较的时间:

我试过这样的事情:

   if ((object)xml == null || ((object)db) == null) …
Run Code Online (Sandbox Code Playgroud)

c# linq lambda compare

-1
推荐指数
1
解决办法
4580
查看次数