我正在尝试将另一个对象列表中的字符串列表分配并输出到控制台。但它继续复制字符串
I'm trying to assign and output to console List of strings from another List of objects. But it continues to duplicate strings
我正在尝试将诱饵列表分配给鱼对象列表中的鱼对象并输出到控制台。但无论如何它都会继续随机复制字符串(诱饵)。我真的没有办法解决它。从逻辑上讲它必须工作 >_>
逻辑:
- 使用数组中的名称生成 3 条鱼,并将它们添加到生成的鱼列表中。
- 将基于鱼名的诱饵列表分配给新创建的鱼。
- 通过Debug.Log在控制台中输出(我使用的是Unity)。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Test : MonoBehaviour
{
List<Fish> generatedFish;
string fishName;
string[] fishNames = {"Karas", "Karp", "Ploc" };
List<string> asignedLures;
// Start is called before the first frame update
void Start()
{
generatedFish = new List<Fish>();
generateFish();
foreach(Fish fish in generatedFish)
{
Debug.Log(fish.fishName);
foreach(string lure in asignedLures)
{
Debug.Log(lure);
}
}
}
class Fish
{
public string fishName { get; set; }
public List<string> lures { get; set; }
}
public void generateFish()
{
int numberOfGeneratedFish = 2;
for(int i = 0; i <= numberOfGeneratedFish; i++)
{
generatedFish.Add(new Fish
{
fishName = AsignName(),
lures = AsignLure(fishName)
});
}
}
public string AsignName()
{
fishName = fishNames[Random.Range(0, fishNames.Length)];
return fishName;
}
public List<string> AsignLure(string fishName)
{
switch (fishName) {
case "Karas":
asignedLures = new List<string> {"corn", "dough", "worms" };
break;
case "Karp":
asignedLures = new List<string> { "potato", "corn", "pea" };
break;
case "Ploc":
asignedLures = new List<string> { "perlovka", "mastique" };
break;
}
return asignedLures;
}
}
代码生成 Fish 并在控制台中输出它们。但是在输出错误的诱饵列表中。同样,它对所有的鱼都是一样的,但每 运行 就不同。像这次所有的鱼都会有“土豆”、“玉米”、“豌豆”。但另一次它会有“玉米”、“面团”、“蠕虫”。
请帮我解决一下 T_T。我在网上找不到类似的东西。
好吧,你替换了 asignedLures
的内容,所以当然每次迭代都是相同的列表
我认为您更想访问存储在 Fish
个实例中的列表
foreach(var fish in generatedFish)
{
Debug.Log(fish.fishName);
foreach(var lure in fish.lures)
{
Debug.Log(lure);
}
}
实际上,我根本看不出有那个 assignedLure
字段的理由。
我宁愿直接return列表,例如
public List<string> GetLureByName(string fishName)
{
switch (fishName)
{
case "Karas":
return new List<string> {"corn", "dough", "worms" };
case "Karp":
return new List<string> { "potato", "corn", "pea" };
case "Ploc":
return new List<string> { "perlovka", "mastique" };
}
// Depending on whether you want to actively handle the exception/that case either
return null;
// Or if you want a "valid" return list but simply empty
return new List<string>();
}
也一样
public string GetRandomName()
{
return fishNames[Random.Range(0, fishNames.Length)];
}
我正在尝试将诱饵列表分配给鱼对象列表中的鱼对象并输出到控制台。但无论如何它都会继续随机复制字符串(诱饵)。我真的没有办法解决它。从逻辑上讲它必须工作 >_>
逻辑:
- 使用数组中的名称生成 3 条鱼,并将它们添加到生成的鱼列表中。
- 将基于鱼名的诱饵列表分配给新创建的鱼。
- 通过Debug.Log在控制台中输出(我使用的是Unity)。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Test : MonoBehaviour
{
List<Fish> generatedFish;
string fishName;
string[] fishNames = {"Karas", "Karp", "Ploc" };
List<string> asignedLures;
// Start is called before the first frame update
void Start()
{
generatedFish = new List<Fish>();
generateFish();
foreach(Fish fish in generatedFish)
{
Debug.Log(fish.fishName);
foreach(string lure in asignedLures)
{
Debug.Log(lure);
}
}
}
class Fish
{
public string fishName { get; set; }
public List<string> lures { get; set; }
}
public void generateFish()
{
int numberOfGeneratedFish = 2;
for(int i = 0; i <= numberOfGeneratedFish; i++)
{
generatedFish.Add(new Fish
{
fishName = AsignName(),
lures = AsignLure(fishName)
});
}
}
public string AsignName()
{
fishName = fishNames[Random.Range(0, fishNames.Length)];
return fishName;
}
public List<string> AsignLure(string fishName)
{
switch (fishName) {
case "Karas":
asignedLures = new List<string> {"corn", "dough", "worms" };
break;
case "Karp":
asignedLures = new List<string> { "potato", "corn", "pea" };
break;
case "Ploc":
asignedLures = new List<string> { "perlovka", "mastique" };
break;
}
return asignedLures;
}
}
代码生成 Fish 并在控制台中输出它们。但是在输出错误的诱饵列表中。同样,它对所有的鱼都是一样的,但每 运行 就不同。像这次所有的鱼都会有“土豆”、“玉米”、“豌豆”。但另一次它会有“玉米”、“面团”、“蠕虫”。
请帮我解决一下 T_T。我在网上找不到类似的东西。
好吧,你替换了 asignedLures
的内容,所以当然每次迭代都是相同的列表
我认为您更想访问存储在 Fish
个实例中的列表
foreach(var fish in generatedFish)
{
Debug.Log(fish.fishName);
foreach(var lure in fish.lures)
{
Debug.Log(lure);
}
}
实际上,我根本看不出有那个 assignedLure
字段的理由。
我宁愿直接return列表,例如
public List<string> GetLureByName(string fishName)
{
switch (fishName)
{
case "Karas":
return new List<string> {"corn", "dough", "worms" };
case "Karp":
return new List<string> { "potato", "corn", "pea" };
case "Ploc":
return new List<string> { "perlovka", "mastique" };
}
// Depending on whether you want to actively handle the exception/that case either
return null;
// Or if you want a "valid" return list but simply empty
return new List<string>();
}
也一样
public string GetRandomName()
{
return fishNames[Random.Range(0, fishNames.Length)];
}