有没有办法在属性中提取唯一值,假设有一些分隔符。所以,如果我有
public function allBy($examId)
{
return \Exam::with('questions.answers')->get();
}
有没有办法获得价值为" foo; bar"没有重复的价值?我知道Item功能不同,但是我们已经能够找到一种将它用于属性的方法。
答案 0 :(得分:2)
以下是有关如何使用ItemGroup的Distinct方法并将结果分配回属性的示例:
<Project DefaultTargets="TestDistinct" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Values>foo;bar;bar;foo</Values>
</PropertyGroup>
<Target Name="TestDistinct">
<ItemGroup>
<ValueGroup Include="$(Values)"/>
</ItemGroup>
<PropertyGroup>
<DistinctValues>@(ValueGroup->Distinct())</DistinctValues>
</PropertyGroup>
<Message Text="$(DistinctValues)" />
</Target>
</Project>
快速解释它是如何工作的。 MSBuild的PropertyGroup只能保存单值元素(属性)。 ItemGroup是列表的模拟。由于您需要对值列表进行操作 - 要提取不同的列表,您需要一个ItemGroup。然后,您应用Distinct()
方法并将结果分配给名为<DistinctValues>
的新属性。现在,您有一个属性,其中包含与原始<Values>
属性不同的元素。