在“表”C#中查找值的有效方法

时间:2009-05-21 22:03:15

标签: c# arrays performance

我需要在“表格”中查找一个值,其中表格可以是数组,也可以是真正的数组 在纸面上它看起来像这样(缩小和概括):

Size      500     750    1000    1250   1500 (speed)
--------------------------------------------
6x5       0.1     0.5     0.55   0.58   0.8
6x4       0.01    0.1     0.4    0.5    0.9
8x5       0.5     0.9     1.1    1.5    2.0
10x5      1.2     1.5     2.0    2.7    3.0
12x6      2.6     3.0     4.4    5.1    7.0  (pressure)

当我有一个可变的大小和速度时,我需要以某种方式提取压力 我现在把每一行放在一个单独的数组中,但我想避免一堆if else's,但我真的不知道更好的方法。谢谢你的帮助。

4 个答案:

答案 0 :(得分:4)

假设您的大小和速度始终是特定值,并且不在示例中指定的值之间(例如,没有大小780598),基于此的最快方式执行查找速度和大小是Dictionary<SizeAndSpeed, double>,其中SizeAndSpeed是这样的类:

public class SizeAndSpeed : IEquatable<SizeAndSpeed>
{
    public string Size { get; set; }
    public int Speed { get; set; }
    public bool Equals(SizeAndSpeed other)
    {
        return Size == other.Size && Speed == other.Speed;
    }
}

我假设Size可以是string,但当然也可以使用更复杂的对象。

答案 1 :(得分:1)

如果大小是唯一的,请将其作为词典的关键,然后您可以使用它来获取其他元素......

答案 2 :(得分:0)

在我的脑海中,您可以使用DataTable。

Size      Speed     Pressure
--------------------------------------------
6x5       500       0.1
6x5       750       0.5
6x5       1000      0.55
6x5       1250      0.58
6x5       1500      0.8
6x4       500       0.01

答案 3 :(得分:0)

创建一个结构来保持大小和速度对:

public struct SizeSpeedKey
{
public string Size;
public int Speed;

public SizeSpeedKey(string size, int speed)
{
  Size = size;
  Speed = speed;
}
}

这将是查找代码:

using System;
using System.Collections.Generic;

namespace LookupTable
{
  internal class Program
  {
    private static readonly Dictionary<SizeSpeedKey, double> lookupTable =
      new Dictionary<SizeSpeedKey, double>
      {
        {new SizeSpeedKey("6x5", 500), 0.1},
        {new SizeSpeedKey("6x5", 750), 0.5},
        {new SizeSpeedKey("6x4", 500), 0.01},
        {new SizeSpeedKey("6x4", 750), 0.1},
        {new SizeSpeedKey("8x5", 500), 0.5},
        {new SizeSpeedKey("8x5", 750), 0.9},
      };

    private static void Main(string[] args)
    {
      // these will of course need to be read from the user
      var size = "6x4";
      var speed = 500;

      Console.WriteLine("For size = {0} and speed = {1}, the pressure will be {2}", size, speed, lookupTable[new SizeSpeedKey(size, speed)]);
      Console.ReadLine();
    }
  }
}