【问题标题】:Retrieve values corresponding to numbers检索与数字对应的值
【发布时间】:2020-04-30 16:23:02
【问题描述】:

我有一个数字列表,每个数字都有两个对应的数字,如下所示:

1: 30 and 60
2: 70 and 100
3: 120 and 150

我想获得与给定数字对应的两个数字。例如,如果我查找 2,我会检索到 70 和 100。

存储和检索此信息的最佳数据类型是什么?

【问题讨论】:

    标签: c# arrays string list


    【解决方案1】:

    这是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# 提供 shortintlongfloatdouble 数据类型。您可以根据需要选择任何数据类型。

    【讨论】:

    • 感谢您的详细解答!
    • 很高兴我的回答对您有所帮助
    【解决方案2】:

    您可以使用带有元组的字典

    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
    

    【讨论】:

    • 感谢您的回答!我最终使用了您的解决方案,因为看起来更容易
    • 很高兴能帮上忙!
    猜你喜欢
    • 2018-09-27
    • 2019-02-22
    • 1970-01-01
    • 2021-10-23
    • 2021-10-01
    • 2020-09-28
    • 2022-01-13
    • 2015-10-10
    • 1970-01-01
    相关资源
    最近更新 更多