C# 给数字赋予不同的值

C# 给数字赋予不同的值,c#,C#,我有点困惑,虽然我相信答案很简单。我想为不同的数字添加不同的值,但如何简单地实现这一点 例如:1=10,3=20,5=30。如果用户输入数字4,答案将是60。因为2没有任何特定的值,所以它也应该是10。数字2也需要10作为一个值,因为它在1之后,并且没有得到新的值。该值在数字3处更改为20,从该值更改为20后的每个数字的值,直到将新值指定给更高的数字。然后数字4需要再次为20,因为值尚未更改,而数字5需要获得50的值 另一个例子: Numers entered by user: 10

我有点困惑,虽然我相信答案很简单。我想为不同的数字添加不同的值,但如何简单地实现这一点

例如:1=10,3=20,5=30。如果用户输入数字4,答案将是60。因为2没有任何特定的值,所以它也应该是10。数字2也需要10作为一个值,因为它在1之后,并且没有得到新的值。该值在数字3处更改为20,从该值更改为20后的每个数字的值,直到将新值指定给更高的数字。然后数字4需要再次为20,因为值尚未更改,而数字5需要获得50的值

另一个例子:

    Numers entered by user: 10

    Values:
    1 = 10
    5 = 20
    8 = 30

    In this case, the values of all the 10 numbers should be:
    1 = 10
    2 = 10
    3 = 10
    4 = 10
    5 = 20
    6 = 20
    7 = 20
    8 = 20
    9 = 30
    10 = 30
答案是:180个所有组合值。

我想你可以使用字典,所以键将是一个用户输入,一个与值相关的响应

IDictionary<int, int> map = new Dictionary<int, int>();
map.Add(1, 10);
map.Add(3, 20);


public int GetResponseForUserInput(int input)
{
   int response = -1;
   if (map.ContainsKey(input))
   {
      response = map[input];
   }

   return response;
}

您可以做的最简单的事情可能就是使用开关结构实现一个方法,如下所示:

public int getNumber(int inputNr)
{
    var returnNr = 1;

    switch (inputNr)
    {
        case 1:
            returnNr = 10;
            break;
        case 3:
            returnNr = 30;
            break;
        case 4:
            returnNr = 60;
            break;
        default:
            // Probably not needed, as default returnNr is 1.
            break;
    }

    return returnNr;
}
编辑:仔细想想,这更容易:

// Place the values in positions according to when you want them as results:
int[] numbers = {1, 10, 1, 30, 60};  

public int getNumber(int inputNr){
    return numbers.GetValue(inputNr); // Return the value at position "inputNr".
}

您的示例包含棘手的错误:不是8=20,而是8=30,所以实际答案是190

下面是根据您的示例计算总数的代码。希望能有帮助

// Following lines should be replaced with actual input method
int TotalNumber = 10;
List<Tuple<int, int>> CheckPoints = new List<Tuple<int, int>>();

CheckPoints.Add(Tuple.Create(1, 10));
CheckPoints.Add(Tuple.Create(5, 20));
CheckPoints.Add(Tuple.Create(8, 30));


int NumberTillCount = 10;//determines point till which calculation should proceed

int result = 0;
Tuple<int, int> CurrentCheckPoint = new Tuple<int,int>(0,0);

//Loop checks if new CheckPoint is encountered and writes it in temp variable 'CurrentCheckPoint'
for (int i = 1; i <= NumberTillCount; i++)
{
    CurrentCheckPoint = CheckPoints.FindIndex(x=>x.Item1 == i) != -1 ? CheckPoints.Find(x=>x.Item1 == i) : CurrentCheckPoint;
    result += CurrentCheckPoint.Item2;
}

我测试了脚本,但不起作用。值之间的所有数字都是-1。@user1931912,这正是它应该如何工作的。必须添加map.AddUserInputNumber,ReturnedValue;对于每个所需的input@Nogard你是说我必须写10000张地图。为我想使用的每一个数字添加语句?数字2也需要10作为一个值,因为它在1之后,并且没有得到新的值。该值在数字3处更改为20,从那时起,每个数字的值在它为20之后都会更改,直到一个新值被分配给一个更高的数字。@user1931912是的,我会这样做,因为您的问题非常复杂。我的理解是,数字之间存在静态依赖关系。从你目前的评论来看,很明显你有一些动态逻辑——请在你的首字母中提供清晰的描述question@Nogard我更改了OP。所有数字都需要映射为与上一个具有固定值的数字相同的值。如果一个较大的数字更改了该值,则该值需要应用于该值之后的所有数字,直到一个新的数字出现另一个新的值。交换机解决方案有几个缺点:1所有依赖项都是硬编码的,不能在运行时更改2可能的扩展到甚至20+的选择将使这个非常庞大,难以维护与上面海报相同的结果。数字2也需要10作为一个值,因为它在1之后,并且没有得到新的值。值在数字3到20之间变化,从那时起,每一个数字的值在它是20之后变化,直到一个新的值被分配给一个更高的数字。我完全知道这里的缺点,但这是一个相当简单的问题,所以它需要一个简单的解决方案,基于一个假设的小的输入数字集来显示一个简单的原理。对于更大的系统,更好的解决方案可能是使用数据库表或类似的东西在输入和输出数字之间进行映射,但这可能稍微超出了本文的范围@user1931912请看我在您原始问题下的评论。当我的答案更清楚你真正需要什么时,我会尝试更新我的答案!:谢谢Kjartan,我会留意的等等4应该重新映射到60,但如果在3之后映射到20。。?因为它没有改变哪个值?我已经给出了答案,但我现在不确定我是否正确理解了你的问题。有点不清楚你到底在问什么-你能提供一个更好的描述,并提供更多你期望的例子吗?@Kjartan我已经更新了开场白,希望现在能更清楚一点。这就是我想要的。非常感谢你!我将进一步研究它