我试图将逗号分隔的字符串与十进制变量进行比较,并仅查找小于我的变量的数量。
我遇到的问题是我的字符串如下:
1美元,5USD,10USD,20USD
我能够使用逗号分隔符和正则表达式拆分将字符串分成集合,但我不认为这是最好的方法,因为我需要检查值并使用us和逗号重建分离 - 。
我的程序将处理的真实世界示例是
decimal changeAvil = 10
notesSet = 1usd,5usd,10usd,20usd
结果应为notesSet = 1usd,5usd
答案 0 :(得分:0)
它不是从未写过的最漂亮的代码,但它确实起作用了。
我使用Linq
选择数字字符串的前缀,然后将这些字符串与changeAvil
的值进行比较。
using System;
using System.Linq;
namespace stack
{
class Program
{
static void Main(string[] args)
{
decimal changeAvil = 10;
var noteSet = "1usd,5usd,10usd,20usd";
var notes = noteSet.Split(',');
var dict =
notes.ToDictionary(
x => int.Parse(new string(x.TakeWhile(c => char.IsNumber(c))
.ToArray())), // key
x => x); // value
var selection = dict.Where(kvp => kvp.Key <= changeAvil)
.Select(kvp => kvp.Value)
.ToList();
foreach (var s in selection) {
Console.WriteLine(s);
}
}
}
}
解决方案返回1usd
,5usd
和10usd
。如果您不希望10usd
成为Linq表达式的kvp.Key <= changeAvil
子句中结果更改kvp.Key < changeAvil
到Where
的一部分。
答案 1 :(得分:0)
您可以使用拆分命令删除字母&#39; usd&#39;然后遍历数组并进行比较
decimal changeAvil = 10
notesSet = 1usd,5usd,10usd,20usd
string noteset_new = noteset.Replace('usd',''); //remove usd
string[] noteset_array = noteset_new.split[',']; //split in to array
现在你可以迭代上面的noteset_array并按你想做的去做。
答案 2 :(得分:0)
对字符串使用replace和split是在字符串字符中使用两次迭代。 获取数组的更好方法是首先在字符串末尾添加逗号,然后使用split:
notesSet = 1usd,5usd,10usd,20usd
string[] noteset_array = (notesSet + ',').split['usd,']; //split in to array