我只是放在这里的所有东西,你们可以看到,看看你能做什么:
private static List<Item> Inventory = new List<Item> ();
public static readonly Dictionary<string, RecipeComponent[]> recipes = new Dictionary<string, RecipeComponent[]>
{
{ "Bear Trap", new[] { new RecipeComponent("Metal Sheet", 1), new RecipeComponent("Duct Tape", 1), new RecipeComponent("Nails", 1) } },
{ "Metal Sheet", new[] { new RecipeComponent("Metal Fragments", 2) } }
};
public void Craft(string result) {
if (HasItem (recipes [result].GetValue ())) {
AddNew (result, 1);
}
}
这是食谱字典的声明,其键是结果对象,第二部分是配方组件,正在定义库存,你可以看到我已经尝试过但未能制作Crafting方法
public struct RecipeComponent
{
public readonly string Material;
public readonly int Count;
public RecipeComponent(string material, int count)
{
Material = material;
Count = count;
}
}
这是recipecomponent对象的声明(无关紧要但仍然存在)
我需要知道的是如何找到与该密钥相关联的值,然后从那里查看清单列表是否具有密钥提及的所有值。
答案 0 :(得分:0)
使用Linq方法GroupBy
,您可以轻松组合所有项目并总结其计数。然后,您可以使用方法All
来测试玩家是否具有所有项目所需的计数。
| UNITCOST |
|-----------|
| £1234.57 |
| £98765.00 |
| £34567.89 |
| £0.00 |
答案 1 :(得分:0)
如果我理解正确,你基本上想要一种传递字符串的方法(这是_recipes字典中的一个键)。如果配方存在,那么您希望增加材料的数量。
假设您的_食谱如下
static readonly Dictionary<string, List<RecipeComponent>> _recipes = new Dictionary<string, List<RecipeComponent>>
{
{
"Bear Trap",
new List<RecipeComponent>
{
new RecipeComponent("Metal Sheet", 1), new RecipeComponent("Duct Tape", 1),
new RecipeComponent("Nails", 1)
}
},
{"Metal Sheet", new List<RecipeComponent> {new RecipeComponent("Metal Fragments", 2)}}
};
然后您可以按如下方式获取组件:
static List<RecipeComponent> GetComponents(string key)
{
return _recipes.FirstOrDefault(kv => kv.Key == key).Value;
}
要添加recipeComponent,您需要配方键和新材料+计数。
static void AddNewComponentTo(string recipeKey)
{
var component = _recipes.FirstOrDefault(kv => kv.Key == recipeKey);
if (component.Value != null)
{
//If you are adding a new material
component.Value.Add(new RecipeComponent("new material", 1));
}
}
要增加计数,您需要配方键和要更新的材料的名称。您可能希望将类更改为
public class RecipeComponent
{
public string Material { get; set; }
public int Count { get; set; }
public RecipeComponent(string material, int count)
{
Material = material;
Count = count;
}
}
然后
static void UpdateCount(string recipeKey, string mName, int updateCount)
{
var recipe = _recipes.FirstOrDefault(kv => kv.Key == recipeKey);
if (recipe.Value != null)
{
var material = recipe.Value.FirstOrDefault(m => m.Material == mName);
if (material != null)
{
material.Count += updateCount;
}
}
}
注意:我将RecipeComponent []更改为List,以便您灵活地添加和删除字典
我希望这会有所帮助