我有一个jSon文件,其中包含一些像这样的值:
{AvailableWeapons:[ {"LevelNumber":1,"WeaponName":"Axe"},{"LevelNumber":5,"WeaponName":"WarHammer"} ]
使用miniJSon,我已将其解析为IDictionary,如下所示:
IDictionary weaponsGrid = JsonManager.instance.availableWeapons as IDictionary;
我在一个具有整数参数" level"的方法中访问它。该方法取参数,将其与每个levelnumber字段进行比较。如果level大于levelNumber,则相应的武器可用。
伪代码:
foreach levelNumber in weaponsGrid,
if currentLevel > levelNumber
get name of weapon available at that level
我怎样才能在C#中实现这一目标?感谢
答案 0 :(得分:4)
使用linq:
DISTINCT
这将为您提供一个值列表,其中键大于X
答案 1 :(得分:2)
你可以做这样的事情
IDictionary<int, string> dict = new Dictionary<int, string> { { 1, "Axe" }, { 6, "WarHammer" }, { 2, "Knife" }, { 9, "Gun" } };
int level = 5; //input to method
List<string> powerfulWeapons = new List<string>(); //method output
foreach (var item in dict)
{
if (item.Key > level)
powerfulWeapons.Add(item.Value);
}
//powerfulWeapons = [ "WarHammer", "Gun" ]
或者,使用Linq
var weapons = weaponsGrid.Where(w => w.Key > 5).Select(d => d.Value);
如果您只想要一个
string firstHeavyWeapon = string.Empty;
var firstHeavyWeaponEntry = weaponsGrid.FirstOrDefault(w => w.Key > 5);
if (!firstHeavyWeaponEntry.Equals(new KeyValuePair<int, string>()))
firstHeavyWeapon = firstHeavyWeaponEntry.Value;
根据评论中的建议,如果您希望第一个(最小)Key
符合条件,则可以执行此操作
var firstHeavyWeaponEntry = weaponsGrid
.OrderBy(w => w.Key)
.FirstOrDefault(w => w.Key > 5);
答案 2 :(得分:1)
$.viewMap = {
'0': $([]),
'view1': $('#view1'),
'view2': $('#view2a, #view2b'),
'view3': $('#view3')
};
$('#viewSelector').change(function() {
// hide all
$(".views").hide();
// show current
$.viewMap[$(this).val()].show();
});
答案 3 :(得分:1)
然后使用Keys
属性,如
foreach(var levelNumber in weaponsGrid.Keys)
{
// your code here
}
您可以使用密钥
访问该值weaponsGrid[levelNumber]
考虑到您已设置词典
IDictionary<int, string> weaponsGrid = new Dictionary<int, string>
{
{ 1, "Axe" },
{ 6, "WarHammer" },
{ 2, "Knife" },
{ 9, "Gun" }
};
你可以检查一个密钥是否存在,然后得到它的值,如
string weapon = weaponsGrid.ContainsKey(6) ? weaponsGrid[6] : string.Empty;
或者,获取所有值
foreach (var item in weaponsGrid.Values)
{
Console.WriteLine(item);
}
答案 4 :(得分:1)
使用KeyValuePair
foreach (KeyValuePair<Int32,string> weapen in weaponsGrid )
{
if(weapen.key > value)
{
var weapenName = weapen.Value
}
}
答案 5 :(得分:0)
您可以使用IDictionary.Keys
属性访问字典中的键,该属性会返回ICollection
个键。对于您的示例,您可以执行以下操作:
foreach (var levelNumber in weaponsGrid.Keys)
{
if (currentLevel > levelNumber)
{
var weaponName = weaponsGrid[levelNumber].Name;
}
}