List<string> lstSample = new List<string>();
Random rand = new Random();
List<int> lstRand = new List<int>();
for (int i = ; lstRand.Count() < sampleNum; i++)
{
int mRandNum = rand.Next(, mStageDataCount);
if (!lstRand.Contains(mRandNum))
{
lstRand.Add(mRandNum);
lstSample.Add(lstDataAll.ToList()[mRandNum]);
}
}

平均等判断

 List<string> lstSampleRangIdSel = new List<string>(); //去掉同一重复的
List<string> lstStageBuildId = IProjectBuildHouseStage.Select(m => m.BuildingId).Distinct().ToList(); //分期所有的
//余数
int mQuotient = sampleNum / lstBuilding.Count();
if (mQuotient > )
{
//少了的楼房数据
int mLost = ;
foreach (var buildId in lstBuilding)
{
Random rand = new Random();
List<int> lstRand = new List<int>();
var lstProjectBuildHouseStageQuotient = IProjectBuildHouseStage.Where(m => m.BuildingId == buildId);
int mBuildHouseCount = lstProjectBuildHouseStageQuotient.Count();
//余数大于楼房数
if (mQuotient > mBuildHouseCount)
{
if (lstProjectBuildHouseStageQuotient.Any())
{
lstProjectBuildHouseSample.AddRange(lstProjectBuildHouseStageQuotient.ToList());
}
mLost = mLost + mQuotient - mBuildHouseCount;
continue;
} for (int i = ; lstRand.Count() < mQuotient; i++)
{
int mRandNum = rand.Next(, mBuildHouseCount);
if (!lstRand.Contains(mRandNum))
{
lstRand.Add(mRandNum);
lstProjectBuildHouseSample.Add(lstProjectBuildHouseStageQuotient.ToList()[mRandNum]);
}
}
} //模数
int mRemainder = sampleNum % lstBuilding.Count() + mLost;
if (mRemainder > )
{
Random rand = new Random();
List<int> lstRand = new List<int>();
for (int i = ; lstRand.Count() < mRemainder; i++)
{
int mRandNum = rand.Next(, mStageDataCount);
if (!lstRand.Contains(mRandNum))
{
string strIdSel = IProjectBuildHouseStage.ToList()[mRandNum].BuildingId;
var lstExcept = lstStageBuildId.Where(m => m != strIdSel).Except(lstSampleRangIdSel);
if (lstExcept.Any() && lstSampleRangIdSel.Contains(strIdSel))
{
continue;
}
lstRand.Add(mRandNum);
lstProjectBuildHouseSample.Add(IProjectBuildHouseStage.ToList()[mRandNum]);
if (!lstSampleRangIdSel.Contains(strIdSel))
{
lstSampleRangIdSel.Add(strIdSel);
}
}
}
}
}
else
{
Random rand = new Random();
List<int> lstRand = new List<int>();
for (int i = ; lstRand.Count() < sampleNum; i++)
{
int mRandNum = rand.Next(, mStageDataCount); if (!lstRand.Contains(mRandNum) )
{
string strIdSel = IProjectBuildHouseStage.ToList()[mRandNum].BuildingId;
var lstExcept = lstStageBuildId.Where(m => m != strIdSel).Except(lstSampleRangIdSel);
if (lstExcept.Any() && lstSampleRangIdSel.Contains(strIdSel))
{
continue;
}
lstRand.Add(mRandNum);
lstProjectBuildHouseSample.Add(IProjectBuildHouseStage.ToList()[mRandNum]);
if (!lstSampleRangIdSel.Contains(strIdSel))
{
lstSampleRangIdSel.Add(strIdSel);
}
}
}
}

--作废

//余数
int mQuotient = sampleNum / lstBuilding.Count();
if (mQuotient > )
{
//少了的楼房数据
int mLost = ;
foreach (var buildId in lstBuilding)
{
Random rand = new Random();
List<int> lstRand = new List<int>();
var lstProjectBuildHouseStageQuotient = IProjectBuildHouseStage.Where(m => m.BuildingId == buildId);
int mBuildHouseCount = lstProjectBuildHouseStageQuotient.Count();
//余数大于楼房数
if (mQuotient > mBuildHouseCount)
{
if (lstProjectBuildHouseStageQuotient.Any())
{
lstProjectBuildHouseSample.AddRange(lstProjectBuildHouseStageQuotient.ToList());
}
mLost = mLost + mQuotient - mBuildHouseCount;
continue;
} for (int i = ; lstRand.Count() < mQuotient; i++)
{
int mRandNum = rand.Next(, mBuildHouseCount);
if (!lstRand.Contains(mRandNum))
{
lstRand.Add(mRandNum);
lstProjectBuildHouseSample.Add(lstProjectBuildHouseStageQuotient.ToList()[mRandNum]);
}
}
} //模数
int mRemainder = sampleNum % lstBuilding.Count() + mLost;
if (mRemainder > )
{
Random rand = new Random();
List<int> lstRand = new List<int>();
for (int i = ; lstRand.Count() < mRemainder; i++)
{
int mRandNum = rand.Next(, mStageDataCount);
if (!lstRand.Contains(mRandNum))
{
lstRand.Add(mRandNum);
lstProjectBuildHouseSample.Add(IProjectBuildHouseStage.ToList()[mRandNum]);
}
}
}
}
else
{
Random rand = new Random();
List<int> lstRand = new List<int>();
for (int i = ; lstRand.Count() < sampleNum; i++)
{
int mRandNum = rand.Next(, mStageDataCount);
if (!lstRand.Contains(mRandNum))
{
lstRand.Add(mRandNum);
lstProjectBuildHouseSample.Add(IProjectBuildHouseStage.ToList()[mRandNum]);
}
}
}

net 总数据中取随机几条数据的更多相关文章

  1. FreeMarkerz在List中取任意一条数据的某一个值

    首先你要知道要取的数据的下标 <#list itemsList as item> <#if item_index==1> <#if "${item.value} ...

  2. SELECT INTO和INSERT INTO SELECT的区别 类似aaa?a=1&b=2&c=3&d=4,如何将问号以后的数据变为键值对 C# 获取一定区间的随即数 0、1两个值除随机数以外的取值方法(0、1两个值被取值的概率相等) C# MD5 加密,解密 C#中DataTable删除多条数据

    SELECT INTO和INSERT INTO SELECT的区别   数据库中的数据复制备份 SELECT INTO: 形式: SELECT value1,value2,value3 INTO Ta ...

  3. sql-实现select取行号、分组后在分组内排序、每个分组中的前n条数据

    表结构设计: 实现select取行号 sql局部变量的2种方式 set @name='cm3333f'; select @id:=1; 区别:set 可以用=号赋值,而select 不行,必须使用:= ...

  4. mysql-利润set变量模拟分组查询每组中的第N条数据

    查询思路: 很多时候想在使用group by时想查询group by的每一组中的第N条数据,而取这些数据时往往按如下方式去执行则很慢 ; 按如上方式,对于数据10000左右的表就已经很吃不消. 或已拼 ...

  5. DataTable相关操作,筛选,取前N条数据,获取指定列数据

    DataTable相关操作,筛选,取前N条数据,获取指定列数据2013-03-12 14:50 by Miracle520, 2667 阅读, 0 评论, 收藏, 编辑 1 #region DataT ...

  6. mysql查询随机几条数据(速度快)

    MySql查询随机几条数据 想到了 Max RAND 这几个函数 用以下2种办法都可以实现查询. 速度还行. 几十万数据左右, 没有什么问题. SELECT * FROM `news` WHERE i ...

  7. sql 查询某个条件多条数据中最新的一条数据或最老的一条数据

    sql 查询某个条件下多条数据中最新的一条数据或最老的一条数据 test_user表结构如下: 需求:查询李四.王五.李二创建的最初时间或者最新时间 1:查询最初的创建时间: SELECT * FRO ...

  8. oracle和sql server中,取前10条数据语法的区别

    在sql server中,取数据中前10条语句,我们可以用top 10 这样语句,但是oracle就没有这个函数,接下来介绍它们之间的区别 1.sql server 取前10语句和随机10条的语法 - ...

  9. 关于MyBatis的collection集合中只能取到一条数据的问题

    问题:在涉及多表查询的时候,使用collection元素来映射集合属性时,出现了只能查询到一条数据的情况,但用sql语句在数据库中查询会有多条记录. 解决:如果两表联查,主表和明细表的主键都是id的话 ...

随机推荐

  1. go语言的信号及其应用

    一.signal包 1.Notify函数 func Notify(c chan<- os.Signal, sig ...os.Signal) 说明:Notify函数让signal包将输入信号转发 ...

  2. 实现简易Web服务器(c语言)

    任务: (1)实现服务器与客户端间的通信. (2)可以实现HTTP请求中的GET方法. (3)提供静态网页浏览功能,如可浏览:HTML页面,无格式文本,常见图像格式等. (4)提供可以传递参数的动态网 ...

  3. luogu2658 GCD(莫比乌斯反演/欧拉函数)

    link 给定整数N,求1<=x,y<=N且Gcd(x,y)为素数的数对(x,y)有多少对. 1<=N<=10^7 (1)莫比乌斯反演法 发现就是YY的GCD,左转YY的GCD ...

  4. DesiredCapabilities内容详解--Appium服务关键字

    上次了解了一些DesiredCapabilities的用法,有些还是不太清楚,去appium官网找了找官方文档,觉得写的很全: ## Appium 服务关键字 <expand_table> ...

  5. 深浅copy 和 集合

    1 对于赋值运算,就是共同指向一个内存地址.将一个值赋予一个变量,那么它的内存地址同时也赋予了他,如果值是不可变类型,改变值,就会产生一个新值和新内存地址,如果值是可变类型那么内存地址不会变. s1 ...

  6. Python序列类型各自方法

    在Python输入dir(str).dir(list).dir(tuple)可查看各种序列类型的所有方法. 对于某个方法不懂怎么使用的情况,可以直接help(str.split)对某个方法进行查询. ...

  7. POJ 2421 Constructing Roads(最小生成树)

    Description There are N villages, which are numbered from 1 to N, and you should build some roads su ...

  8. POJ 3281 Dining ( 最大流 && 建图 )

    题意 : 有 N 头牛,John 可以制作 F 种食物和 D 种饮料, 然后接下来有 N 行,每行代表一头牛的喜好==>开头两个数 Fi 和 Di 表示这头牛喜欢 Fi 种食物, Di  种饮料 ...

  9. IIS Express被局域网访问

    在 文件夹 C:\Users\administrator\Documents\IISExpress\config 下面 applicationhost.config 文件里 找到相应的项目 如 < ...

  10. newFixedThreadPool固定线程使用

    1.newFixedThreadPool固定线程池,  使用完毕必须手动关闭线程池, 否则会一直在内存中存在, package ThreadTest; import java.util.concurr ...