c# 避免重复读取数组中的字符串

认真学编程 2010-05-24 02:57:41
有数组string[] arr1 ={"T123","D234","T2345","W123456","D456788","F23566"}和数组string[] arr2={"T","D","W"},如果arr1中的字符串包含arr2中的字符串,则读出该字符串,但只读出arr1中第一个含有arr2中字符串的字符串,即只读出"T123","D234","W123456"这3个字符串,请问这个功能要怎么实现啊,请教啦
...全文
223 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
tanxiaowei 2010-05-24
  • 打赏
  • 举报
回复
学习学习。
testtestett 2010-05-24
  • 打赏
  • 举报
回复
感觉linq就是语法糖
deknight 2010-05-24
  • 打赏
  • 举报
回复
同上 复内容太短了!
zhoubupt 2010-05-24
  • 打赏
  • 举报
回复
yhb417的写法都没用过,差距啊
兔子-顾问 2010-05-24
  • 打赏
  • 举报
回复
崇拜的目光投向yhb417。linq
修改一下昵称 2010-05-24
  • 打赏
  • 举报
回复

string[] vars = new string[] { "T123", "D234", "T2345", "W123456", "D456788", "F23566" };
string[] vars2 = new string[] { "T", "D", "W" };

var query1 = from val in vars where vars2.Contains(val.Substring(0, 1)) orderby val select val;


foreach (var item in query1)
{

Response.Write(item + "<br>");
}

deknight 2010-05-24
  • 打赏
  • 举报
回复
Dictionary<string, string> myDic = new Dictionary<string, string>();
myDic.Add("aaa", "111");
myDic.Add("bbb", "222");
myDic.Add("ccc", "333");
myDic.Add("ddd", "444");
//如果添加已经存在的键,add方法会抛出异常
try
{
myDic.Add("ddd","ddd");
}
catch (ArgumentException ex)
{
Console.WriteLine("此键已经存在:" + ex.Message);
}
//解决add()异常的方法是用ContainsKey()方法来判断键是否存在
if (!myDic.ContainsKey("ddd"))
{
myDic.Add("ddd", "ddd");
}
else
{
Console.WriteLine("此键已经存在:");

}
兔子-顾问 2010-05-24
  • 打赏
  • 举报
回复
是的。
testtestett 2010-05-24
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 wuyazhe 的回复:]

简化一下:
C# code
private static void TestSearch01()
{
string[] arr1 = { "T123", "D234", "T2345", "W123456", "D456788", "F23566" };
string[] arr2 = { "T", "D", "W" };
string search = string……
[/Quote]

s[0]。。。只是第一个字符吗?
兔子-顾问 2010-05-24
  • 打赏
  • 举报
回复
简化一下:
private static void TestSearch01()
{
string[] arr1 = { "T123", "D234", "T2345", "W123456", "D456788", "F23566" };
string[] arr2 = { "T", "D", "W" };
string search = string.Empty;
foreach (string s in arr2) search += s;
string[] arr = (from s in arr1 where search.Contains(s[0]) orderby s select s).ToArray();
foreach (string s in arr)
{
Console.WriteLine(s);
}
}
兔子-顾问 2010-05-24
  • 打赏
  • 举报
回复
private static void TestSearch01()
{
string[] arr1 = { "T123", "D234", "T2345", "W123456", "D456788", "F23566" };
string[] arr2 = { "T", "D", "W" };
string search = string.Empty;
foreach (string s in arr2) search += s;
string[] arr = (from s in arr1 where search.Contains(s.Substring(0, 1)) orderby s.Substring(0, 1) select s).ToArray();
foreach (string s in arr)
{
Console.WriteLine(s);
}
}
weike021996 2010-05-24
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 yzxdc 的回复:]
C# code

ArrayList result = new ArrayList();
foreach(string s1 in arr1)
foreach(string s2 in arr2)
if(s1.IndexOf(s2) >= 0)
{
result.add(s1);
arr2.Re……
[/Quote]
mark
wangkun9999 2010-05-24
  • 打赏
  • 举报
回复
典型的查找算法,如果字符串比较大的话,主要看效率的问题
参考
lhm741cs 2010-05-24
  • 打赏
  • 举报
回复
直接双循环
remove()移除已遍历的就可以
最简单,最笨的方法
yzxdc 2010-05-24
  • 打赏
  • 举报
回复

ArrayList result = new ArrayList();
foreach(string s1 in arr1)
foreach(string s2 in arr2)
if(s1.IndexOf(s2) >= 0)
{
result.add(s1);
arr2.Remove(s2);
break;
}

LingXX0103 2010-05-24
  • 打赏
  • 举报
回复
如果是arr2作为主循环 找到跳出循环 不会有重复

如果不放心
说一个思路
如果用arr2中找到了(indexof) 则把arr2中这个元素清空 那么下次永远也找不到
就不会重复了
testtestett 2010-05-24
  • 打赏
  • 举报
回复
最笨的方法,两个循环遍历输出

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧