我正在寻找一个多集的.Net实现.谁能推荐一个好的?
(多集或包,是一个可以具有重复值的集合,您可以在其上设置操作:交集,差异等.例如购物车可以被认为是多集,因为您可以多次出现相同的产品.)
以下是我的代码在这里,我使用多个列表从数据库中获取数据.从hql查询中获取数据时,它显示异常.
Pojo类
public class BillDetails implements java.io.Serializable {
private Long billNo;
// other fields
@LazyCollection(LazyCollectionOption.FALSE)
private List<BillPaidDetails> billPaidDetailses = new ArrayList<BillPaidDetails>();
private Set productReplacements = new HashSet(0);
@LazyCollection(LazyCollectionOption.FALSE)
private List<BillProduct> billProductList = new ArrayList<BillProduct>();
//getter and setter
}
Run Code Online (Sandbox Code Playgroud)
hmb.xml文件
<class name="iland.hbm.BillDetails" table="bill_details" catalog="retail_shop">
<id name="billNo" type="java.lang.Long">
<column name="bill_no" />
<generator class="identity" />
</id>
<bag name="billProductList" table="bill_product" inverse="true" lazy="false" fetch="join">
<key>
<column name="bill_no" not-null="true" />
</key>
<one-to-many class="iland.hbm.BillProduct" />
</bag>
<bag name="billPaidDetailses" table="bill_paid_details" inverse="true" lazy="false" fetch="select">
<key>
<column name="bill_no" not-null="true" /> …Run Code Online (Sandbox Code Playgroud) 我发现自己ConcurrentBag<T>对即将推出的.NET 4.0框架中的类的存在非常感兴趣:
当订购无关紧要时,袋子可用于存放物品,与套装不同,袋子支持重复.
我的问题是:这个想法如何实施?大多数集合我熟悉基本量(引擎盖下)某种形式的阵列,其中为了不得"的事情,"但有是一个订单(这就是为什么,尽管它并不需要,枚举几乎总是要经过一个不变的集合,可以是List,Queue,Stack,等以相同的顺序).
如果我不得不猜测,我可能会建议在内部它可能是一个Dictionary<T, LinkedList<T>>; 但实际上这似乎是非常可疑的,因为将任何类型T用作关键都没有意义.
我期待/希望的是,这实际上是一个已经在某处被"弄清楚"的既定对象类型,并且知道这种已建立类型的人可以告诉我它.这对我来说太不寻常了 - 其中一个概念在现实生活中很容易理解,但很难转化为可用的类作为开发人员 - 这就是为什么我对可能性感到好奇.
编辑:
一些响应者建议a Bag可以是内部哈希表的一种形式.这也是我最初的想法,但我预见到这个想法有两个问题:
正如Meta-Knight建议的那样,也许一个例子可以使这更清楚:
public class ExpensiveObject() {
private ExpensiveObject() {
// very intense operations happening in here
}
public ExpensiveObject CreateExpensiveObject() {
return new ExpensiveObject();
}
}
static void Main() {
var expensiveObjects = new ConcurrentBag<ExpensiveObject>();
for (int i = 0; i < 5; i++) {
expensiveObjects.Add(ExpensiveObject.CreateExpensiveObject()); …Run Code Online (Sandbox Code Playgroud) 我有一个使用Hibernate映射的组件.如果数据库中组件中的所有字段都为null,则hibernate将组件本身设置为null.这是预期的行为,也是我需要的.
我遇到的问题是,当我向该组件添加一个包时,该包被初始化为一个空列表.这意味着组件具有非空值...导致组件被创建.
知道如何解决这个问题吗?
<class name="foo.bar.Entity" table="Entity">
<id name="id" column="id">
<generator class="native" />
</id>
<property name="departure" column="departure_time" />
<property name="arrival" column="arrival_time" />
<component name="statistics">
<bag name="linkStatistics" lazy="false" cascade="all" >
<key column="entity_id" not-null="true" />
<one-to-many class="foo.bar.LinkStatistics" />
</bag>
<property name="loggedTime" column="logged_time" />
...
</component>
Run Code Online (Sandbox Code Playgroud)
Restirctions.isNull("statistics")的条件确实返回了预期值.
这是与问题相关的示例代码。这个 API 试图实现一个具有邻接表表示的图,该图是由图中每个顶点索引的 Bags 数组。
public class Graph{
private final int V; //no. of vertices
private Bag<Integer>[] adj; // A bag for each vertex to store all adjacent vertices
.
.
.
}
Run Code Online (Sandbox Code Playgroud)
在这里使用 Bag 比链表或 Set 有什么优势。我知道袋子是无序的,但是当它们不能节省我们的时间或空间时,为什么要使用无序列表呢?
我们可以使用该total方法知道a中所有权重的总和Bag.
> my $b = (1,2,1).Bag
Bag(1(2), 2)
> $b.total
3
Run Code Online (Sandbox Code Playgroud)
但是,如果我们使用的%印记,而不是$我们的Bag,我们得到了一个错误信息.
> my %b = (1,2,1).Bag
{1 => 2, 2 => 1}
> %b.total
No such method 'total' for invocant of type 'Hash'. Did you mean 'cotan'?
in block <unit> at <unknown file> line 1
Run Code Online (Sandbox Code Playgroud)
如果%b明确转换为Bag之前total,它的工作原理是:
> %b.Bag.total
3
Run Code Online (Sandbox Code Playgroud)
问题:我曾经认为,随着Set,Bag,SetHash等,采用的%印记是优选的.我错了吗?
我为文本分析做了一个预处理部分,在删除停用词和词干后,如下所示:
test[col] = test[col].apply(
lambda x: [ps.stem(item) for item in re.findall(r"[\w']+", x) if ps.stem(item) not in stop_words])
train[col] = train[col].apply(
lambda x: [ps.stem(item) for item in re.findall(r"[\w']+", x) if ps.stem(item) not in stop_words])
Run Code Online (Sandbox Code Playgroud)
我有一个列有“清理词”列表的列。这是一列中的 3 行:
['size']
['pcs', 'new', 'x', 'kraft', 'bubble', 'mailers', 'lined', 'bubble', 'wrap', 'protection', 'self', 'sealing', 'peelandseal', 'adhesive', 'keeps', 'contents', 'secure', 'tamper', 'proof', 'durable', 'lightweight', 'kraft', 'material', 'helps', 'save', 'postage', 'approved', 'ups', 'fedex', 'usps']
['brand', 'new', 'coach', 'bag', 'bought', 'rm', 'coach', 'outlet']
Run Code Online (Sandbox Code Playgroud)
我现在想将 CountVectorizer 应用于此列:
from …Run Code Online (Sandbox Code Playgroud) 我想要一个袋子容器,它隐藏了客户的"真实"订单.
它也必须是完全多态的,不应该对其元素类型有任何约束.
我发现了至少三种袋子的实现:Bag来自ghc包装,Data.Bag来自bag和Math.Combinatorics.Multiset来自的模块multiset-comb.
然而,它们都具有暴露元件内部顺序的操作toList和fold*操作,这可能取决于实现细节或袋构造的顺序.
toList是不可能的,至少是类型Bag a -> [a].但是,折叠并不总是暴露订单.
例如,fold (+) 0不公开.
问题是,我应该如何设计折叠界面?是否有必要和充分的a -> a -> a折叠功能安全条件?由于fmap没有暴露订单,折叠时a -> b -> b是否会失去通用性?
我正在考虑可交换的幺半群 - 它们似乎已经足够了,但我不确定是否有必要使用关联性和身份元素.
我希望这个问题具体到足以被认为适合StackOverflow.我检查了常见问题解答,我认为这符合资格,因为它是特定的并且与编程有关.
我正在Java中实现复杂的数据挖掘算法(FP-growth).算法的一些初始阶段要求我扫描大型数据库并保持找到的每个项目类型的运行计数.这似乎非常适合Hashbag界面.我在Apache Commons中找到了一个似乎对我有用的东西.
所以现在,我的HashBag填充了[itemType,count]条目(对).稍后在算法中,我需要在这些对上做很多类似列表的操作.在某些情况下,我必须按itemType对集合进行排序.在其他人中,我必须按计数排序.这似乎非常适合List界面.
我得出的结论是,我必须将我的Hasbag转换为List.但它在某种程度上感觉很脏,就像浪费空间和时间.是否有一种更聪明的方法可以做到这一点,或者是一个常见的情况,如果你必须在不同的时间以不同的方式处理你的收藏,那么转换是必要的恶魔?
另一种方法是制作我自己的界面,这是一个真正的列表,但允许"袋式"添加.每次我想添加一些东西时,我必须保持列表排序并使用自定义比较器执行二进制搜索.构建该集合可能比构建Hashbag需要更长的时间,但我会在最后保存转换步骤.有什么想法更好吗?
谢谢!