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. 根据GridView模板里的列名获取列索引

    以前Insus.NET在写过一篇<在Gridview控件中根据Field Name来取得对应列索引> http://www.cnblogs.com/insus/archive/2010/0 ...

  2. P2245 星际导航 瓶颈路

    \(\color{#0066ff}{ 题目描述 }\) sideman 做好了回到 \(\text{Gliese}\) 星球的硬件准备,但是 \(\text{sideman}\) 的导航系统还没有完全 ...

  3. An error has occurred. See error log for more details. java.lang.NullPointerException

    今天重新新建一个eclipse的空间,就报了这么一个错误,百度找了很多,发现不对头,都不行.后来点开错误一看,原来是web.xml里面没有文件头造成的. 解决办法:只需要在web.xml文件里添加文件 ...

  4. 谷歌通过ajax获取本地JSON文件,为什么会显示跨域?转载的

    在本地写了一段JSON代码,然后用ajax读取后,在浏览器打开,发现谷歌提示涉及到跨域问题, 但是跨域是由于协议,域名,端口中有一个不同,才会跨域,我在本地访问自己的文件,怎么和跨域扯上关系了?? 谷 ...

  5. svn 常用忽略

    *.o *.lo *.la *.al .libs *.so *.so.[-]* *.a *.pyc *.pyo __pycache__ *.rej *~ #*# .#* .*.swp .DS_Stor ...

  6. sublime 显示 python 错误信息

    默认的编译器可以直接按Ctrl+B编译运行Python,并在控制台输出结果.美中不足的是无法输出中文,需要自己手动配置一番. 在Sublime Text 3 中依次点击菜单Tools->buil ...

  7. git push fatal: HttpRequestException encountered

    原因: github禁用了TLS1.0/1.1协议 截至2018年2月22日,GitHub禁用了对弱加密的支持,这意味着许多用户会突然发现自己无法使用Git for Windows进行身份验证(影响版 ...

  8. redis修改密码和更改端口

    Liunx下redis修改密码和更改端口 redis一个实例就是一个节点,每个节点分配一个端口号,每个节点对应一个redis.conf配置文件. redis默认配置的端口号是6379,假设现在要多配置 ...

  9. Java8 流的使用示例

    foreach遍历处理 dataList.stream().forEach(index -> sb.append(dataList.get(index) + "',")); ...

  10. ftp功能深度剖析 + 线程 031

    一 打印进度条 import time for i in range(20): # \r 回到行首打印内容 如果有同一行内容,那么就被抹掉了 n = '>'* i print('\r%s'%n, ...