一个面试题 从原数组内生成一个指定大小(长度小于原数组)的数组

jianjialin 2009-04-03 04:54:45
比如一个int数组长度是100,内容可以是任何数字。现在要在这个数组里面随即取20个项组成新的数组。
请问下面这个代码好吗?还有没有更佳的办法?
谢谢


/// <summary>
/// 从原数组内生成一个指定大小(长度小于原数组)的数组
/// </summary>
/// <param name="alOld">原数组</param>
/// <param name="count">目标随即数组的大小</param>
/// <returns>返回新的数组</returns>
private IList<int> GetQIDs(IList<int> alOld, int length)
{
IList<int> newList = new List<int>();
int min = 0;

while (newList.Count < length)
{
int max = alOld.Count-1;
while (true)
{
Random rnd = new Random();
int rand = rnd.Next(min, max + 1);
if (!Exists(newList, alOld[rand]))
{
newList.Add(rand);
alOld.RemoveAt(rand);
break;
}
}
}

return newList;
}

private bool Exists(IList<int> al, int n)
{
if (al.Contains(n))
return true;
else
return false;
}
...全文
112 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
阿非 2009-04-03
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 Sandy945 的回复:]
C# code
/// <summary>
/// 从原数组内生成一个指定大小(长度小于原数组)的数组
/// </summary>
/// <param name="alOld">原数组</param>
/// <param name="count">目标随即数组的大小</param>
/// <returns>返回新的数组</returns>
private IList<int> GetQIDs(IList<int> alOld, int length)
{
IList<int> newList = new List<int>();

int min = 0;

[/Quote]

/// <summary>
/// 从原数组内生成一个指定大小(长度小于原数组)的数组
/// </summary>
/// <param name="alOld">原数组</param>
/// <param name="count">目标随即数组的大小</param>
/// <returns>返回新的数组</returns>
private IList<int> GetQIDs(IList<int> alOld, int length)
{
IList<int> newList = new List<int>();

Random rnd = new Random();
int rand;
while (newList.Count <= length)
{
rand = rnd.Next(1, alOld.Count);
newList.Add(alOld[rand]);
alOld.RemoveAt(rand);
}

return newList;
}

zhantianyou 2009-04-03
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 ojlovecd 的回复:]
C# codeint[] GetQIDs(int[] alOld,intlength)
{int[] result=newint[length];
Random r=newRandom(Environment.TickCount);intcount=0;while(count<length)
{intj=r.Next(0, alOld.Length);if(Array.IndexOf(result, alOld[j])<0)
{
result[count]=alOld[j];
count++;
}
}returnresult;
}
[/Quote]
這個好.只循環一次.
樓主你那個嵌套了,會影響效率
阿非 2009-04-03
  • 打赏
  • 举报
回复

/// <summary>
/// 从原数组内生成一个指定大小(长度小于原数组)的数组
/// </summary>
/// <param name="alOld">原数组</param>
/// <param name="count">目标随即数组的大小</param>
/// <returns>返回新的数组</returns>
private IList<int> GetQIDs(IList<int> alOld, int length)
{
IList<int> newList = new List<int>();

int min = 0;
Random rnd = new Random();
int rand;
while (newList.Count <= length)
{
rand = rnd.Next(1, alOld.Count);
newList.Add(rand);
alOld.RemoveAt(rand);
}

return newList;
}
SealedLove 2009-04-03
  • 打赏
  • 举报
回复


/// <summary>
/// 从原数组内生成一个指定大小(长度小于原数组)的数组
/// </summary>
/// <param name="alOld">原数组</param>
/// <param name="count">目标随即数组的大小</param>
/// <returns>返回新的数组</returns>
private IList<int> GetQIDs(IList<int> alOld, int length)
{
IList<int> newList = new List<int>();
int max = alOld.Count;
if (max >= length)
{
while (newList.Count < length)
{
Random rnd = new Random();
int rand = rnd.Next(0, max);
newList.Add(alOld[rand]);
alOld.RemoveAt(rand);
max--;
}
}
return newList;
}
我姓区不姓区 2009-04-03
  • 打赏
  • 举报
回复

int[] GetQIDs(int[] alOld, int length)
{
int[] result = new int[length];
Random r = new Random(Environment.TickCount);
int count = 0;
while (count < length)
{
int j = r.Next(0, alOld.Length);
if (Array.IndexOf(result, alOld[j]) < 0)
{
result[count] = alOld[j];
count++;
}
}
return result;
}

111,126

社区成员

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

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

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