我有一个列表,其中包含我已经设置过的数据:
public List<string> stringValues = new List<string>();
void Start()
{
stringValues.Add( "D5B51D14-9ED8-1530-5455-CFF2C4B86151");
stringValues.Add( "335B8649-AB22-E146-05A0-E9A4F3813A1F");
stringValues.Add( "28797BB5-9020-C0B5-F0CE-72AB7F1830E2");
stringValues.Add( "CD377141-422D-E8B0-B845-A0AF408E565A");
stringValues.Add( "DEEE65FB-FF1F-A6A9-4C3C-5784F41B0D39");
stringValues.Add( "70489FFA-6C88-A40D-C615-FD1EDEBD7643");
}
我还有一种方法可以读取从设备发送的数据并将其显示在屏幕上。我不得不从字符串中删除一些字符串以确保我只获得我想要的数据,以便显示在屏幕上。
这就是方法的样子:
private void AppendString(string message)
{
int startIndex = 38;
int endIndex = 36;
message = message.Substring(startIndex,endIndex);
messageCount = "length is " + message.Length.ToString();
outputContent.text += "\n" + message;
}
问题是,发送到我的程序的数据是我不知道的。它可以包含任何东西。我需要我的程序要做的是检查我需要的字符串部分,并将它找到的值与我列表中的值进行比较。然后,如果列表包含相同的数据,请执行某些操作。
如何将我的列表与使用上面的代码动态传递给它的数据进行比较?
修改的
我将稍微解释一下appendMessage函数以及为什么会这样:
我读入的设备按以下方式发送数据:
<CBPeripheral: 0xda4bab0 identifier = D5B51D14-9ED8-1530-5455-CFF2C4B86151, Name = "estimote", state = connecting>
大部分都没问题,但我唯一关心的部分是该行标识符部分中的长号。在我运行应用程序的程序中,不是显示整行,而是它所提供的唯一部分就是那个数字。没有其他的。
所以,具有斩那行,我存储在一个叫的UILabel(统一GUI串)outputContent
,我当通过调用访问在它保持的数据outputContent.text
当与下面给出的示例答案结合使用时,我的列表检查如下所示:
if(stringValues.Contains(outputContent.text))
{
Instantiate(estimote6Model, new Vector3(2.5f,0.7f,0), Quaternion.identity);
uuidString = "got an estimote 6";
}
然而,虽然显示的字符串是我想要的行的一部分,但没有任何反应,我仍在尝试找出原因。
答案 0 :(得分:1)
您可以使用方法.Contains()搜索列表。所以像这样:
if (stringValues.Contains(message))
{
// do something
}
您可以在AppendString()
方法的末尾添加此剪辑,因为在那里,变量message
应该包含id,它可能是stringValues
列表的一部分,对吗?
如果您不想在AppendString()
方法中检查此内容,则必须将设备中的ID存储在单独的列表中:
public List<string> deviceValues = new List<string>();
private void AppendString(string message)
{
int startIndex = 38;
int endIndex = 36;
message = message.Substring(startIndex,endIndex);
messageCount = "length is " + message.Length.ToString();
outputContent.text += "\n" + message;
deviceValues.Add(message); // add here the input from the device
}
然后,您可以检查stringValues
是否包含来自deviceValues
的任何值:
if (stringValues.Any(x => deviceValues.Contains(x)))
{
// do something
}