以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  [求助]能否在狐表里使用下面的第三方DLL进行运算  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=2350)

--  作者:ybtxdz
--  发布时间:2009/4/8 11:09:00
--  [求助]能否在狐表里使用下面的第三方DLL进行运算

在网上看到这么一个DLL

"有时候我们要进行集合的集合运算,如并集,交集等。由于.NET框架本身没有提供集合运算功能,在使用这方面的功能时,我们可以借助第三方的类库来实现。在NHibernate 框架中有个Iesi.Collection.dll,这个类库提供了集合运算功能,并且支持泛型。"

求助: 在狐表里能否使用该DLL? 如果能的话, 又该如何使用? 建议在狐表中增加此类运算.


例子:
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using Iesi.Collections.Generic;

public partial class _Default : System.Web.UI.Page 
{
    
protected void Page_Load(object sender, EventArgs e)
    {
        ISet
<string> Girls = new HashedSet<string>();   
         Girls.Add(
"Christine");   
         Girls.Add(
"Eva");   
         Girls.Add(
"Jean");   
         Girls.Add(
"Novia");   
        Girls.Add(
"Winnie");   
   
         ISet
<string> PMs = new HashedSet<string>();   
         PMs.Add(
"Eva");   
         PMs.Add(
"Novia");   
         PMs.Add(
"Vincent");   
         PMs.Add(
"Williams");   
         PMs.Add(
"Winnie");   
   
         ISet
<string> GirlPMs = Girls.Intersect(PMs);           
         Response.Write(
"是女生且是PM: <br />");   
         
foreach (string s in GirlPMs) {   
             Response.Write(s 
+ "<br />");   
         }   
   
         Response.Write(
"<br />");   
         ISet
<string> GirlNotPMs = Girls.Minus(PMs);   
         Response.Write(
"是女生且不是PM: <br />");   
         
foreach (string s in GirlNotPMs) {   
             Response.Write(s 
+ "<br />");   
         }   
   
         Response.Write(
"<br />");   
         ISet
<string> GirlOrPMs = Girls.Union(PMs);   
         Response.Write(
"是女生或是PM: <br />");   
         
foreach (string s in GirlOrPMs) {   
             Response.Write(s 
+ "<br />");   
         }   
   
         Response.Write(
"<br />");   
         ISet
<string> NotMatch = Girls.ExclusiveOr(PMs);   
         Response.Write(
"是女生但不是PM,或是PM但不是女生: <br />");   
         
foreach (string s in NotMatch) {   
             Response.Write(s 
+ "<br />");   
         }   

    }
}

运行结果: 

是女生且是PM: 
Eva
Novia
Winnie

是女生且不是PM: 
Christine
Jean

是女生或是PM: 
Christine
Eva
Jean
Novia
Winnie
Vincent
Williams

是女生但不是PM,或是PM但不是女生: 
Christine
Williams
Jean
Vincent
 下载信息  [文件大小:   下载次数: ]
点击浏览该文件:iesi.collections.rar


--  作者:狐狸爸爸
--  发布时间:2009/4/8 11:16:00
--  
可以的,将Dll文件复制到foxtable目录下即可。
--  作者:ybtxdz
--  发布时间:2009/4/8 11:19:00
--  
以下是引用狐狸爸爸在2009-4-8 11:16:00的发言:
可以的,将Dll文件复制到foxtable目录下即可。

Dll复制到foxtable目录后, 又该如果在狐表里引用或声明呢, 大师能否给个例子?


--  作者:狐狸爸爸
--  发布时间:2009/4/8 11:26:00
--  
你只需复制到foxtable目录下,打开项目的时候,会自动引用。
如果你知道其命名空间,直接声明和使用即可。

--  作者:ybtxdz
--  发布时间:2009/4/8 12:12:00
--  [求助]档案编号的生成问题
以下是引用狐狸爸爸在2009-4-8 11:26:00的发言:
你只需复制到foxtable目录下,打开项目的时候,会自动引用。
如果你知道其命名空间,直接声明和使用即可。

谢谢大师指点, 成功


--  作者:don
--  发布时间:2009/4/8 12:49:00
--  

并集
若 A 和 B 是集合,则 A 和 B 并集是有所有 A 的元素和所有 B 的元素,而没有其他元素的集合。 A 和 B 的并集通常写作 "A ∪B"。 形式上:

x 是 A ∪B 的元素,当且仅当
x 是 A 的元素,或
x 是 B 的元素。
举例: 集合 {1, 2, 3} 和 {2,3,4,5,6} 的并集是 {1, 2, 3, 4,5,6}。


Dim Ls1 As String() = {1,2,3}
Dim Ls2 As String() = {2,3,4,5,6}
Dim LsB  As New List(Of String)
Dim Ls ,Tz As String

For Each Ls In Ls1
    Tz  = Tz  & "|" & Ls
    LsB.Add(Ls)
Next

For Each Ls In Ls2
    if Tz.Indexof(Ls) = -1 then
        LsB.Add(Ls)
    End If
Next


交集
A 和 B 的交集写作 "A ∩B"。 形式上:

x 属于 A ∩B 当且仅当
x 属于 A, 且
x 属于 B。
例如: 集合 {1, 2, 3} 和 {2,3,4,5,6} 的交集为 {2, 3}。


Dim Ls1 As String() = {1,2,3}
Dim Ls2 As String() = {2,3,4,5,6}
Dim LsB  As New List(Of String)
Dim L1 ,L2 As String

For Each L1 In Ls1
    For Each L2 In Ls2
        if L1  = L2 then
             LsB.Add(L1)
             Exit  For
        End If
    Next
Next

[此贴子已经被作者于2009-4-8 13:16:46编辑过]

--  作者:ybtxdz
--  发布时间:2009/4/8 13:26:00
--  
以下是引用don在2009-4-8 12:49:00的发言:

并集
若 A 和 B 是集合,则 A 和 B 并集是有所有 A 的元素和所有 B 的元素,而没有其他元素的集合。 A 和 B 的并集通常写作 "A ∪B"。 形式上:

x 是 A ∪B 的元素,当且仅当
x 是 A 的元素,或
x 是 B 的元素。
举例: 集合 {1, 2, 3} 和 {2,3,4,5,6} 的并集是 {1, 2, 3, 4,5,6}。


Dim Ls1 As String() = {1,2,3}
Dim Ls2 As String() = {2,3,4,5,6}
Dim LsB  As New List(Of String)
Dim Ls ,Tz As String

For Each Ls In Ls1
    Tz  = Tz  & "|" & Ls
    LsB.Add(Ls)
Next

For Each Ls In Ls2
    if Tz.Indexof(Ls) = -1 then
        LsB.Add(Ls)
    End If
Next


交集
A 和 B 的交集写作 "A ∩B"。 形式上:

x 属于 A ∩B 当且仅当
x 属于 A, 且
x 属于 B。
例如: 集合 {1, 2, 3} 和 {2,3,4,5,6} 的交集为 {2, 3}。


Dim Ls1 As String() = {1,2,3}
Dim Ls2 As String() = {2,3,4,5,6}
Dim LsB  As New List(Of String)
Dim L1 ,L2 As String

For Each L1 In Ls1
    For Each L2 In Ls2
        if L1  = L2 then
            LsB.Add(L1)
        End If
    Next
Next

[此贴子已经被作者于2009-4-8 12:50:16编辑过]


呵呵, 谢谢don ! 收藏 !


--  作者:kylin
--  发布时间:2009/4/8 14:06:00
--  

不知道什么用?还是顶一个


--  作者:don
--  发布时间:2009/4/8 14:50:00
--  
以下是引用kylin在2009-4-8 14:06:00的发言:

不知道什么用?还是顶一个

简单应用,如表A和表B都有ID列,求两ID列不同的ID号(并集)?求两ID列相同的ID号(交集)?

表AID

A0001
A0002
A0003
A0004
A0005
A0006
...
表BID
A0001
A0002
...

[此贴子已经被作者于2009-4-8 14:53:50编辑过]

--  作者:kylin
--  发布时间:2009/4/8 15:24:00
--  
似乎明白了不少,谢谢!