Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 包含一些相等键/值的配对列表?_C#_Linq_Data Structures - Fatal编程技术网

C# 包含一些相等键/值的配对列表?

C# 包含一些相等键/值的配对列表?,c#,linq,data-structures,C#,Linq,Data Structures,我需要一张有“string”、“string”的配对表 尝试: Dictionary<string, string> Categories= new Dictionary<string, string>(); 尝试列表,或者为了增加可读性,只需创建一个新类型 如果您需要在linq期间使其有意义,可以将元组转换为匿名类型(在此处使用let),为该类型提供一些合理的属性名称: var items = new List<Tuple<string, string&g

我需要一张有“string”、“string”的配对表

尝试:

Dictionary<string, string> Categories= new Dictionary<string, string>();
尝试
列表
,或者为了增加可读性,只需创建一个新类型

如果您需要在linq期间使其有意义,可以将元组转换为匿名类型(在此处使用
let
),为该类型提供一些合理的属性名称:

var items = new List<Tuple<string, string>>
    {
        new Tuple<string, string>("Adam", "1"), 
        new Tuple<string, string>("Adam", "2")
    };

var names = from i in items
            let person = new { Name = i.Item1, Number = i.Item2 }
            select person.Name;
元组相等性基于它的所有属性对同一类型元组实例的相等性。例如,
newtuple(“Adam”,“1”)。等于(newtuple(“Adam”,“1”))
将为真

列表也不会停止重复的项目。如果您需要在所有属性中强制唯一性,那么您需要的就是
哈希集。

尝试
列表
,或者为了提高可读性,只需创建一个新类型

如果您需要在linq期间使其有意义,可以将元组转换为匿名类型(在此处使用
let
),为该类型提供一些合理的属性名称:

var items = new List<Tuple<string, string>>
    {
        new Tuple<string, string>("Adam", "1"), 
        new Tuple<string, string>("Adam", "2")
    };

var names = from i in items
            let person = new { Name = i.Item1, Number = i.Item2 }
            select person.Name;
元组相等性基于它的所有属性对同一类型元组实例的相等性。例如,
newtuple(“Adam”,“1”)。等于(newtuple(“Adam”,“1”))
将为真


列表也不会停止重复的项目。如果您需要在所有属性之间强制唯一性,那么您需要的就是
哈希集。

尝试使用
列表
尝试使用
列表
字典
是哈希位置键,因此字典中不能有重复项。通过使用
KeyValuePair
Tuple

a
Dictionary
是散列位置键,因此字典中不能有重复项。您可以使用
KeyValuePair
Tuple

创建自己的类型列表

public class Pair
{
  public string First {get;set;}
  public string Second {get;set;}
}
然后你可以有一个
列表来保存你的数据

有几种可能的库类,您可以根据自己的需要重新设计它们,但特别是如果这一对实际上代表了某种东西(意味着您要将类和属性重命名为更有意义的东西),那么将其放在自己的类中来表示这一点可能会很有用。如果您确实想重复使用现有类型,那么
Tuple
可能是最佳选择。

只需创建自己的类型

public class Pair
{
  public string First {get;set;}
  public string Second {get;set;}
}
然后你可以有一个
列表来保存你的数据


有几种可能的库类,您可以根据自己的需要重新设计它们,但特别是如果这一对实际上代表了某种东西(意味着您要将类和属性重命名为更有意义的东西),那么将其放在自己的类中来表示这一点可能会很有用。如果您确实想重复使用现有类型,那么
Tuple
可能是最佳选择。

A
列表
可能在.NET 3.5或更低版本下运行良好,如果4或更高版本,则列表
将是赢家。

A
列表
可能在.NET 3.5或更低版本下运行良好,如果4或更高版本下运行良好,
List
将是赢家。

我喜欢这个。直到我读到这个答案,我才知道元组是什么。然后我进一步读到:@DaveDev是的,我喜欢小剂量的tuple(因为到处都是Item1/2/3,所以它变得不可读)。当你看到你提供的docs链接时,总是让我咯咯地笑,“我们如何接受可变数量的参数?”“我们定义了8个类!”“上帝保佑我们,如果他们需要第9个…”@AdamHouldsworth它可以做到:
Tuple nineDTuple或完全用LISP风格完成:
元组九元组2@Servy我宁愿玩俄罗斯轮盘赌也不愿再看一遍代码;-)我在一个有三个闭合角括号的类型上画了一条线
>
。我试图坚持的一条经验法则是,如果我看到自己写的代码看起来像那样,无论出于什么原因,我通常都是错的。根据我的经验,当代码看起来像这样时,你是在试图把自己从某些东西中挖掘出来。我喜欢这样。直到我读到这个答案,我才知道元组是什么。然后我进一步读到:@DaveDev是的,我喜欢小剂量的tuple(因为到处都是Item1/2/3,所以它变得不可读)。当你看到你提供的docs链接时,总是让我咯咯地笑,“我们如何接受可变数量的参数?”“我们定义了8个类!”“上帝保佑我们,如果他们需要第9个…”@AdamHouldsworth它可以做到:
Tuple nineDTuple或完全用LISP风格完成:
元组九元组2@Servy我宁愿玩俄罗斯轮盘赌也不愿再看一遍代码;-)我在一个有三个闭合角括号的类型上画了一条线
>
。我试图坚持的一条经验法则是,如果我看到自己写的代码看起来像那样,无论出于什么原因,我通常都是错的。根据我的经验,当代码看起来像这样时,你在试图从中挖掘自己。在
Tuple
上需要注意的一点是,尽管它的可读性要高得多,但没有任何现成的平等逻辑,但这两个实例只是基于引用,而不是基于内容。这就是说,覆盖它显然很简单,只是它不是免费的:-)在
元组
上需要注意的一点是,尽管它的可读性要高得多,但它没有现成的任何合适的相等逻辑,但这两个实例只是基于引用而不是内容相等。这就是说,显然可以直接覆盖它,只是它不是免费的:-)