查找共享公共属性的变量

PFD*_*PFD 4 variables wolfram-mathematica properties

我正在使用Mathematica并且有一组变量(A,B,C,D,...),其属性A =(蓝色,大,圆形),B =(红色,小,尖尖),等等.这些属性在变量之间可能很常见.查找共享共同属性(例如,小)的所有变量的最佳通用方法是什么?谢谢.

Sim*_*mon 7

以下是可能的属性列表:

In[1]:= properties={"red","green","blue","big","small","rounded","spiky"};
Run Code Online (Sandbox Code Playgroud)

这是一个包含其中一些属性的对象列表

In[2]:= list={{"blue","big","rounded"},{"red","small","spiky"},
              {"red","big","rounded"},{"blue","small","spiky"}};
Run Code Online (Sandbox Code Playgroud)

您可以找到所有具有"蓝色"属性的对象 Select

In[3]:= Select[list, MemberQ[#,"blue"]&]
Out[3]= {{blue,big,rounded},{blue,small,spiky}}
Run Code Online (Sandbox Code Playgroud)

这可以包含在一个函数中.虽然我将如何编写该函数将取决于您计划的数据结构和用法.


实际上,我只是重读了一个问题,你有一个带有一些属性的对象列表,你想要按名称引用这些对象.所以你可能想要更像的东西

In[1]:= listProperties["A"]:={"blue","big","rounded"}
        listProperties["B"]:={"red","small","spiky"}
        listProperties["C"]:={"red","big","rounded"}
        listProperties["D"]:={"blue","small","spiky"}
Run Code Online (Sandbox Code Playgroud)

上面我定义了一些与某些字符串相关的属性.您不必在上面或下面使用字符串,并且您可以创建比您想要的更好的结构.你也可以创建一个构造函数来创建上面的,这样的构造函数也可以检查提供的属性列表是否是正确的形式 - 即没有相互矛盾的属性,都在已知属性的列表等...

然后我们定义一个函数来测试对象/字符串是否具有与之关联的特定属性

In[2]:= hasProperty[obj_, property_]:=MemberQ[listProperties[obj],property]
Run Code Online (Sandbox Code Playgroud)

如果listProperties[obj]没有与之关联的定义/规则,您可能希望返回错误或警告消息.

使用Select发现在有关联属性"蓝色"列表中的所有"对象":

In[3]:= Select[{"A","B","C","D"}, hasProperty[#,"blue"]&]
Out[3]= {A,D}
Run Code Online (Sandbox Code Playgroud)

还有其他方法(可能更好的方法)来设置这样的数据结构.但这是Mathematica中最简单的方法之一.