【发布时间】:2020-04-30 16:23:02
【问题描述】:
我有一个数字列表,每个数字都有两个对应的数字,如下所示:
1: 30 and 60
2: 70 and 100
3: 120 and 150
我想获得与给定数字对应的两个数字。例如,如果我查找 2,我会检索到 70 和 100。
存储和检索此信息的最佳数据类型是什么?
【问题讨论】:
我有一个数字列表,每个数字都有两个对应的数字,如下所示:
1: 30 and 60
2: 70 and 100
3: 120 and 150
我想获得与给定数字对应的两个数字。例如,如果我查找 2,我会检索到 70 和 100。
存储和检索此信息的最佳数据类型是什么?
【问题讨论】:
这是Encapsulation OOP 支柱的一个很好的例子:
封装是指一组相关的属性、方法和 其他成员被视为单个单元或对象。
您可以分别创建一个具有三个属性 Id、Number1 和 Number2 的类。这样,您将更容易保持所有三个数字之间的关系
public class Numbers
{
public int Id { get; set; }
public int Number1 { get; set; }
public int Number2 { get; set; }
public Numbers(int id, int num1, int num2)
{
this.Id = id;
this.Number1 = num1;
this.Number2 = num2;
}
}
你有类似的数字列表,
List<Numbers> NumberList = new List<Numbers>()
{
new Numbers(1, 30, 60),
new Numbers(2, 70, 100),
new Numbers(3, 120, 150)
}
现在如果你想通过 Id 对它进行过滤,那么
using System.Linq;
...
var result = NumberList.FirstOrDefault(x => x.Id == 3);
Console.WriteLine($"{result.Id}: {result.Number1} and {result.Number2}");
输出:
3: 120 and 150.
存储/检索此信息的最佳数据类型是什么?
要存储数字数据,C# 提供 short、int、long、float、double 数据类型。您可以根据需要选择任何数据类型。
【讨论】:
您可以使用带有元组的字典
var dic = new Dictionary<int, Tuple<int, int>>();
dic.Add(1, Tuple.Create(30, 60));
dic.Add(2, Tuple.Create(70, 100));
dic.Add(3, Tuple.Create(120, 150));
那么如果例如你想获得对应于例如 3 的两个数字
dic.TryGetValue(3, out Tuple<int, int> res);
var firstNumber= res.Item1; //this should be 120
var secondNumber = res.Item2; //this should be 150
【讨论】: