C# 包含一些相等键/值的配对列表?
我需要一张有“string”、“string”的配对表 尝试: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
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
aDictionary
是散列位置键,因此字典中不能有重复项。您可以使用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
上需要注意的一点是,尽管它的可读性要高得多,但没有任何现成的平等逻辑,但这两个实例只是基于引用,而不是基于内容。这就是说,覆盖它显然很简单,只是它不是免费的:-)在元组
上需要注意的一点是,尽管它的可读性要高得多,但它没有现成的任何合适的相等逻辑,但这两个实例只是基于引用而不是内容相等。这就是说,显然可以直接覆盖它,只是它不是免费的:-)